<?php
/**
 * @author kwor
 * @url http://www.kwor.cn
 *
 */
if (!defined('VALIDADMIN')) die ('Access Denied.');
/**
 * 登陆成功,创建session
 * @return  bool
 **/
function admin_session($user,$pwd,$admintype,$adminid)
{
	$_SESSION['user']=$user;
	$_SESSION['admintype']=$admintype;
	$_SESSION['adminid']=$adminid;
	if(isset($_SESSION['user'])==true || $_SESSION['user']=="" || $_SESSION['adminid']=="" || isset($_SESSION['adminid'])==true ){
		return true;
	}else {
		return false;
	}
}

/**
 *注销成功，清除session
 * @return  bool
 **/
function unset_admin_session()
{
	unset($_SESSION['user']);
	unset($_SESSION['admintype']);
	unset($_SESSION['adminid']);
	if($_SESSION['adminpower']!=="" && $_SESSION['adminpower']!==null){
		unset($_SESSION['adminpower']);
	}
	if(isset($_SESSION['adminpower'])==false&& isset($_SESSION['user'])==false && isset($_SESSION['adminid'])==false){
		return true;
	}else {
		return false;
	}
}


/**
 * 检查管理员是否登陆
 * @return bool
 *
 */
function check_admin_login() {
	if($_SESSION['user']=="" || $_SESSION['user']==null || $_SESSION['adminid']=="" || $_SESSION['adminid']==null ||$_SESSION['admintype']=="" || $_SESSION['admintype']==null){
		return false;
	}else {
		return true;
	}

}


/**
 *
 * 验证管理员类型是否符合要求
 * @param $admintype
 * @param $msg
 */
function check_admin_type($admintype,$msg) {

	$sql='select type_name	from sn_all_type where id='.$_SESSION['admintype'];
	$res=$GLOBALS['db']->getrow($sql);
	if($res['type_name']!==$admintype){
		sys_msg($msg, 1);
		exit();
	}
}

/**
 * 获取管理员类型数组（html_select）
 * $addkey    自己添加的选项名称
 * $addval    自己添加的选项值
 */
function get_admintype($addkey='',$addval='') {
	$sql='select type_name,id from sn_all_type where Type_for = 0';
	$admintypearr=$GLOBALS[db]->getlist($sql);
	if($addkey!==""){
		$new[$addval]=$addkey;	//注意此处是相反的
	}
	foreach ($admintypearr as $key => $value) {
		$new[$admintypearr[$key]['id']]=$admintypearr[$key]['type_name'];
	}
	return $new;
}

/**
 * 获取会员类型数组（html_select）
 * $addkey    自己添加的选项名称
 * $addval    自己添加的选项值
 */
function get_membertype($addkey='',$addval='') {
	$sql='select name,id from sn_member_type where isdel="N" ';
	$membertypearr=$GLOBALS[db]->getlist($sql);
	if($addkey!==""){
		$new[$addval]=$addkey;	//注意此处是相反的
	}
	foreach ($membertypearr as $key => $value) {
		$new[$membertypearr[$key]['id']]=$membertypearr[$key]['name'];
	}
	return $new;
}


/**
 * 获取已安装模块数组（html_select）
 * $addkey    自己添加的选项名称
 * $addval    自己添加的选项值
 */
function get_modsarr($addkey='',$addval='') {
	$sql='select name,id from  sn_mods where is_install="Y" ';
	$modsarr=$GLOBALS[db]->getlist($sql);
	if($addkey!==""){
		$new[$addval]=$addkey;	//注意此处是相反的
	}
	foreach ($modsarr as $key => $value) {
		$new[$modsarr[$key]['id']]=$modsarr[$key]['name'];
	}
	return $new;
}



/**
 * 通用获取上级信息数组（html_select[后台菜单]主要是一级上级）
 * $addkey    自己添加的选项名称
 * $addval    自己添加的选项值
 * $noselfid  排除的id，主要是防止修改更换上级选中自己的情况发生
 */
function get_upclass($table,$addkey='',$addval='',$noselfid='',$where='where isdel="N" and upid=0') {

	$sql='select id,name from '.$table.' '.$where.' '.$noselfid;

	$arr=$GLOBALS[db]->getlist($sql);
	if($addkey!==""){
		$new[$addval]=$addkey;	//注意此处是相反的
	}
	foreach ($arr as $key => $value) {
		$new[$arr[$key]['id']]=$arr[$key]['name'];
	}
	return $new;
}

/**
 *
 * 获取下拉菜单，带缩进（符号自定）
 * @param  $table  //表名
 * @param  $addkey //自定义键
 * @param  $addval //自定义键值
 * @param  $cat_id //拉去的分类id,默认为0
 * @param  $sign   //缩进使用的前置符号
 */
function get_clslist($table,$addkey='',$addval='',$cat_id=0,$sign='&nbsp;&nbsp;&nbsp;&nbsp;') {
	$arr=get_listarr($table,$cat_id);//带缩进级别的数组
	if($addkey!==""){
		$new[$addval]=$addkey;	//注意此处是相反的
	}
	foreach ($arr as $key => $value) {
		$topsign='';
		if($arr[$key]['level']!==0){
			for ($i = 0; $i < $arr[$key]['level']; $i++) {
				$topsign.=$sign;
			}
		}
		$new[$arr[$key]['id']]=$topsign.$arr[$key]['name'];
	}
	return $new;
}



/**
 * 通用获取带缩进级别的栏目信息数组（html_select[文章、产品类别]树状结构）
 *
 */

function get_listarr($table,$spec_cat_id=0) {
	$sql='SELECT a.id as cat_id,a .name as cat_name,a.upid as parent_id,a.ordid as ordid,a.isshow as isshow,count( b.id ) AS has_children FROM '.$table.'
	      AS a LEFT JOIN '.$table.' AS b ON b.upid = a.id 
	      GROUP BY a.id
	      ORDER BY a.upid, a.id ASC';
	$arr=$GLOBALS[db]->getlist($sql);  //获取一个带下级个数的数组


	static $cat_options = array();
	if (isset($cat_options[$spec_cat_id]))
	{
		return $cat_options[$spec_cat_id];
	}



	$level = $last_cat_id = 0;
	$options = $cat_id_array = $level_array = array();
	if (!isset($cat_options[0]))
	{

		while (!empty($arr)) {
			foreach ($arr AS $key => $value)
			{
				$cat_id = $value['cat_id'];
				//	unset($arr[$key]);//遍历过了就不再遍历

				if ($level == 0 && $last_cat_id == 0)
				{
					if ($value['parent_id'] > 0)
					{
						break;
					}
					$options[$cat_id] = $value;
					$options[$cat_id]['level'] = $level;
					$options[$cat_id]['id'] = $cat_id;
					$options[$cat_id]['name'] = $value['cat_name'];
					//遍历过了就不再遍历
					unset($arr[$key]);
					if ($value['has_children'] == 0)
					{
						continue;
					}
					$last_cat_id = $cat_id;//下层结点的父亲结点
					$cat_id_array = array($cat_id);
					$level_array[$last_cat_id] = ++$level;
					continue;
				}
				//当前结点的父亲结点ID等于它的上一级结点ID
				if ($value['parent_id'] == $last_cat_id)
				{
					$options[$cat_id] = $value;
					$options[$cat_id]['level'] = $level;
					$options[$cat_id]['id'] = $cat_id;
					$options[$cat_id]['name'] = $value['cat_name'];
					unset($arr[$key]);//遍历过了就不再遍历
					if ($value['has_children'] > 0)
					{
						if (end($cat_id_array) != $last_cat_id)
						{
							$cat_id_array[] = $last_cat_id;
						}
						$last_cat_id = $cat_id;//当现结点做为下一级结点的新的父亲结点
						$cat_id_array[] = $cat_id;//进驻
						$level_array[$last_cat_id] = ++$level;//当前结点的下一级结点深度

					}
				}elseif ($value['parent_id'] > $last_cat_id)
				{//如果当前结点父亲深度大于目前父亲结点的深度则进行下一轮循环
					break;
				}
				/*else {
				 unset($arr[$key]);//遍历过了就不再遍历
				 }//*/
			}//endforeach
			$count = count($cat_id_array);
			if ($count > 1)
			{
				//取出最后进驻的父亲节点作为当前父亲节点
				$last_cat_id = array_pop($cat_id_array);
			}elseif ($count == 1)
			{
				if ($last_cat_id != end($cat_id_array))
				{
					//进驻的父亲结点只有一个时并且没有作为当前父亲节点时把它取出
					$last_cat_id = end($cat_id_array);
				}else
				{ //否则最后取出的父亲结点一定是一级分类结点
					$level = 0;
					$last_cat_id = 0;
					$cat_id_array = array();
					continue;
				}


			}

			if ($last_cat_id && isset($level_array[$last_cat_id]))
			{
				//取出当前结点的深度
				$level = $level_array[$last_cat_id];
			}
			else
			{
				$level = 0;
			}

		}//endwhile
		$cat_options[0] = $options;
	}else
	{
		$options = $cat_options[0];
	}
	//如果从0开始即取整个树则直接返回不再处理.
	if (!$spec_cat_id)
	{
		return $options;
	}else
	{
		if (empty($options[$spec_cat_id]))
		{
			return array();
		}
		$spec_cat_id_level = $options[$spec_cat_id]['level'];

		foreach ($options AS $key => $value)
		{
			if ($key != $spec_cat_id)
			{
				unset($options[$key]);
			}
			else
			{
				break;
			}
		}
		$spec_cat_id_array = array();
		foreach ($options AS $key => $value)
		{
			if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
			($spec_cat_id_level > $value['level']))
			{
				break;
			}
			else
			{
				$spec_cat_id_array[$key] = $value;
			}
		}
		$cat_options[$spec_cat_id] = $spec_cat_id_array;
		return $spec_cat_id_array;
	}

}




/**
 * 系统提示信息
 *
 * @access      public
 * @param       string      msg_detail      消息内容
 * @param       int         msg_type        消息类型， 0消息，1错误，2警告
 * @param       array       links           可选的链接
 * @param       boolen      $auto_redirect  是否需要自动跳转
 * @return      void
 */
function sys_msg($msg_detail, $msg_type = 0, $links = array(), $auto_redirect = true)
{
	if (count($links) == 0)
	{
		$links[0]['text'] = $GLOBALS['lang']['go_back'];
		$links[0]['href'] = 'javascript:history.go(-1)';
	}

	$GLOBALS['xueniao']->assign('msg_detail',  $msg_detail);
	$GLOBALS['xueniao']->assign('msg_type',    $msg_type);
	$GLOBALS['xueniao']->assign('links',       $links);
	$GLOBALS['xueniao']->assign('default_url', $links[0]['href']);
	$GLOBALS['xueniao']->assign('auto_redirect', $auto_redirect);
	$GLOBALS['xueniao']->display('message.htm');
	exit;
}



/**
 *
 * 获取文件夹下所有插件中定义的信息
 * @param $directory
 * @param $type
 */
function get_plugins_info($directory,$type='') {
	$handle = @opendir($directory);
	$filec=array();
	$set_plugins=true;
	while (false !== ($file = @readdir($handle)))
	{
		if (preg_match("/^.*?\.php$/", $file))
		{
			include_once($directory. '/' .$file);
			$sql='select is_install from sn_plugins where name="'.$plugin['name'].'"';
			$res=$GLOBALS[db]->getrow($sql);
			if($res)
			{
				if($res['is_install']=='N')
				{
					$plugin['install']='N';
				}else{
					$plugin['install']='Y';
				}
			}else {
				$plugin['install']='N';
			}
			if($type==''){
				$filec[]=$plugin;
			}else {
				if($plugin['type']==$type)
				{
					$filec[]=$plugin;
				}
			}
		}
	}
	@closedir($handle);
	unset($set_plugins);
	return $filec;
}


/**
 *
 * 获取文件夹下所有模块或指定模块的说明文件中定义的信息
 * @param $directory
 * @param $dodir //true就获取所有下级文件夹，false就直接获取该文件夹下的详细
 * 结果根据$dodir参数是否输出不同类型的数组
 */
function get_modulesinfo($directory,$dodir=true) {
	$filec=array();
	if($dodir){
		foreach (get_dirname($directory) as $modc)
		{
			$moddir=$directory.$modc;
			if(file_exists($moddir.'/info.php'))
			{
				$set_mod=true;
				include_once($moddir.'/info.php');
				$mod['dir']=$moddir;
				//判断安装与否
				$sql='select is_install from sn_mods where dir="'.$moddir.'"';
				$res=$GLOBALS[db]->getrow($sql);
				if($res)
				{
					if($res['is_install']=='N')
					{
						$mod['install']='N';
					}else{
						$mod['install']='Y';
					}
				}else {
					$mod['install']='N';
				}
				$filec[]=$mod; //输出多维数组
				unset($set_mod);
			}
		}
	}else {
		$moddir=$directory;
		if(file_exists($moddir.'/info.php'))
		{
			$set_mod=true;
			include_once($moddir.'/info.php');
			$mod['dir']=$moddir;
			//判断安装与否
			$sql='select is_install from sn_mods where dir="'.$moddir.'"';
			$res=$GLOBALS[db]->getrow($sql);
			if($res)
			{
				if($res['is_install']=='N')
				{
					$mod['install']='N';
				}else{
					$mod['install']='Y';
				}
			}else {
				$mod['install']='N';
			}
			$filec=$mod;   //输出一维数组
			unset($set_mod);
		}
	}


	return $filec;
}


/**
 *
 * 页面列表获取的通用方法（带分页）
 * @param $table//查询的表名
 * @param $arr//查询的字段，可为数组或字符
 * @param $infoname//smarty标签名称
 * @param $htmlpage//模板页面
 * @param $fypage
 * @param $nowpage
 * @param $where
 * @param $linkt
 * @param $pagesize
 */
function get_list($table,$arr,$infoname,$htmlpage,$fypage,$nowpage,$where='',$linkt='?',$pagesize=18) {
	if(is_array($arr)){
		$parm=implode(",", $arr);
	}else {
		$parm=$arr;
	}
	$amount=$GLOBALS[db]->getcount($table,$where);
	if($amount!==0){
		$pagefy=$GLOBALS[pageination]->pageination_lab($nowpage,$amount,$pagesize,2,$linkt);
		$GLOBALS[xueniao]->assign($fypage,$pagefy['pagelab']);
		$sql='select '.$parm.' from '.$table.' '.$where.' limit '.$pagefy['start'].','.$pagefy['step'];
		$getinfo=$GLOBALS[db]->getlist($sql);
		$GLOBALS[xueniao]->assign($infoname,$getinfo);
	}
	$GLOBALS[xueniao]->display($htmlpage);

}


/**
 *
 * 数组列表获取（带分页）
 * @param $arr   //要求列表的数组
 * @param $infoname //标签名称
 * @param $htmlpage //模板文件
 * @param $pagesize //每页条数
 * @param $fypage  //分页标签名称
 * @param $page    //当前页
 * @param $linkt   //链接页面（特殊）
 */

function get_list_arr($arr,$infoname,$htmlpage,$pagesize=10,$fypage,$page,$linkt='?') {
	$count=count($arr);
	$pagefy=$GLOBALS[pageination]->pageination_lab($page, $count,$pagesize,2,$linkt);
	$GLOBALS[xueniao]->assign($fypage,$pagefy['pagelab']);
	$infolist=array_slice($arr,$pagefy['start'],$pagefy['step']);
	$GLOBALS[xueniao]->assign($infoname,$infolist);
	$GLOBALS[xueniao]->display($htmlpage);
}


/**
 *
 * 页面信息获取的一般形式
 * @param $table    //查询的表名
 * @param $arr      //查询的字段，可为数组或字符
 * @param $infoname  //smarty标签名称
 * @param $htmlpage  //模板页面
 * @param $where     //查询条件
 */
function get_info($table,$arr,$infoname,$htmlpage,$where='') {
	if(is_array($arr)){
		$parm=implode(",", $arr);
	}else {
		$parm=$arr;
	}

	if($where=='')
	{
		$sql='select '.$parm.' from '.$table;

	}else {

		$sql='select '.$parm.' from '.$table.' where '.$where;
	}

	$getinfo=$GLOBALS[db]->getrow($sql);
	$GLOBALS[xueniao]->assign($infoname,$getinfo);
	$GLOBALS[xueniao]->display($htmlpage);

}


/**
 *
 * 验证是否数据库中一存在相同信息
 * @param $table
 * @param $eqkey
 * @param $eqval
 */
function eqdata($table,$eqkey,$eqval) {
	$sql='select * from '.$table.' where '.$eqkey.'="'.$eqval.'"';
	$res=$GLOBALS[db]->getrow($sql);
	if($res){
		return true;
	}else {
		return false;
	}
}


/**
 *
 * 获取指定条件的指定值
 * @param $table
 * @param $pkey
 * @param $pval
 * @param $cont
 * @param $where
 */
function getinfo($table,$pkey,$pval,$cont,$where=''){
	if($where==''){
		$sql='select '.$cont.' from '.$table.' where ' .$pkey.'='.$pval;
	}
	else
	{
		$sql='select '.$cont.' from '.$table.' where '.$where.' and '.$pkey.'='.$pval;
	}
	$res=$GLOBALS[db]->getrow($sql);
	if($res){
		return $res[$cont];
	}else
	{
		return false;
	}
	//*/
}


?>